import { useRoutes } from "react-router-dom";

/**
 * 获取扁平化的侧边栏路由列表对象
 * @param menuItems  结构化的菜单路由对象
 * @param arr 最终要返回的扁平化路由列表
 * @returns []
 */
export const getFlatMenuRoutes = (menuItems, arr=[]) => {
  if (!(menuItems instanceof Array)) {
    return [];
  }
  menuItems.forEach((item) => {
    /** 这个地方得判断下,菜单项里面有可能是这种的{type: 'divider'} */
    if (item.key) {
      let name = item.key.split("/").filter(Boolean).join("");
      arr.push({ name: name, label: item.label, path: item.key });
      /** 递归遍历路由的children */
      if (item.children) {
        getFlatMenuRoutes(item.children, arr);
      }
    }
  });
  return [...arr];
};

/**
 * 获取扁平化的路由列表对象
 * @param routes  结构化的路由对象
 * @param arr 最终要返回的扁平化路由列表
 * @returns []
 */
export const getFlatRoutes = (
  routes,
  arr = []
) => {
  if (!(routes instanceof Array)) {
    return [];
  }
  routes.forEach((item) => {
    arr.push({
      name: item.meta ? item.meta.title : "",
      path: item.path,
      /**下面就是用户能否进入当前路由页的认证信息 */
      scope: item.meta ? item.meta.scope : 1,
      purview: item.meta ? item.meta.purview : [],
      role: item.meta ? item.meta.role : [],
    });
    if (item.children) {
      // 递归调用
      getFlatRoutes(item.children, arr);
    }
  });
  return [...arr];
};

export class RouteMeta {
  /** 路由标题 */
  title = "";
  /** 默认系统域 */
  scope = 1;
  /** 当前路由匹配的用户权限列表 */
  purview = [];
  /** 当前路由匹配的用户角色列表 */
  role = [];
  constructor(title, purview = [], role= []) {
    this.title = title;
    this.purview = purview;
    this.role = role;
  }
}

/** 动态创建路由（<Routes>和<Route>） */
export const Router = ({ routes }) => useRoutes(routes);
